<?php
namespace Util;
use Think\Controller;

class PageList extends Controller {
	private $page;//当前页面
    private $pageTotal;//页面总数
    private $start;//起始页面
    private $end;//终止页面
    private $showPage;//显示页码
    public $offset;//页面偏移量
    private $show;//页码数据
    private $data;//数据列表
    private $data_num;//数据数量
    private $pageSize;//显示数据数量
    private $method_mode = 0;//默认数组分页
  
    function __construct(){
    	//func_get_arg():返回指定的参数值。 
    	$param =func_get_arg(0);
    	$param_list = func_get_args();
    	//数组分页
    	if(is_array($param)){
    		//若存在xx方法，使用call_user_func_array(arr1,arr2)函数调用他,该函数的参数为两个数组，前面的数组为调用谁($this)的什么($f)方法，后一个数组为参数  
    		call_user_func_array(array($this,"__construct0"),$param_list); 
    	}else{
    		call_user_func_array(array($this,"__construct1"),$param_list); 
    		$this->method_mode = 1;
    	}
    }

    /*
     * @param $data：数据列表
	 * @param $pageSize：显示数量
	 * @param $showPage  显示页码数量，请输入奇数 
     */
    function __construct0($data,$pageSize,$showPage){
    	//当前页面
        $this->page = empty(I('page'))? 1: intval(I('page'));
		//页码总数
        $this->pageTotal = ceil(count($data)/$pageSize);
		//数据列表
		$this->data = $data;
		//数据数量
		$this->data_num = count($data);
		//显示数量
		$this->pageSize = $pageSize;
		$this->showPage = $showPage;
		//页码偏移量
		$this->offset = ($showPage-1)/2;
    }
    
     /*
     * @param $count:总数据量
	 * @param $pageSize：显示数量
	 * @param $showPage  显示页码数量，请输入奇数 
     */
    function __construct1($count,$pageSize,$showPage){
    	//当前页面
        $this->page = empty(I('page'))? 1: intval(I('page'));
        //数据数量
		$this->data_num = $count;
		//页码总数
        $this->pageTotal = ceil($count/$pageSize);
		//显示数量
		$this->pageSize = $pageSize;
		$this->showPage = $showPage;
		//页码偏移量
		$this->offset = ($showPage-1)/2;
    }
    
    
	
   	private function first()
    {
        if($this->page > 1) {
            $pager = "<a href='javascript:void(0);' class='first' onclick='to_page(1);' >首页</a>";
            $pager .= "<a href='javascript:void(0);' class='prev' onclick='to_page(".($this->page-1).");'><上一页</a>";
            return $pager;
        }else{
            $pager = "<span class='disable' >首页</span>";
            $pager .= "<span class='disable' ><上一页</span>";
            return $pager;
        }
    }
	
	private function last()
    {
        if($this->page < $this->pageTotal){
            $pager = "<a href='javascript:void(0);' class='next' onclick='to_page(".($this->page+1).")' >下一页></a>";
            $pager.= "<a href='javascript:void(0);' class='last' onclick='to_page(".($this->pageTotal).")' >末页</a>";
            return $pager;
        }else{
            $pager = "<span class='disable' >下一页></span>";
            $pager .= "<span class='disable'>末页</span>";
            return $pager;
        }
    }
	
	//获取页码列表
	private function getPageList(){
	    $show = "";
	    //页面总数
	    $pageTotal = $this->pageTotal;
	    //当前页面
	    $page = $this->page;
	    //偏移量
	    $offset = $this->offset;
	   	$start = 1;
		$end = $pageTotal;
		$showPage = $this->showPage;
		
        //页码数量大于显示页码数量	
        if($pageTotal > $showPage){
       		//例子：页码数量 :11,显示页码数量:5
       	   	//左边显示省略号,例如当显示页码2,3,4,5,6时
       	    if($page > $offset + 1) {
		        $show .= "&nbsp;...&nbsp;";
		    }
		   
		   //当前页码超过偏移量，例如当page=3时，start为1,end为5
		   if($page > $offset) {
		    $start = $page-$offset;
		    $end = $pageTotal > ($page + $offset) ? ($page + $offset) : $pageTotal;
	       }else{
	       	//例如当page=2时，start为1,end为5
      		$start  = 1;
			$end = $showPage;	
	       } 
		   //当page=10时，start为7,end为11,其实就是减去2个偏移量
		   if($page + $offset > $pageTotal) {
		        $start = $start - ($page +$offset - $end);
		    }   
        }
		
		//页码数据
		for($i = $start; $i <= $end;$i++) {
		    if($page == $i) {
		        $show .= "<span class='current' >$i</span>";
		    }else{
		        $show .= "<a href='javascript:void(0);' class='num' onclick='to_page(".$i.")' >$i</a>";
		    }
		}
		
		//页码总数大于5
		if($page + $offset < $pageTotal && $pageTotal > $this->showPage) {
		    $show .= "&nbsp;...&nbsp;";
		}
		return $show;
    }

	//获取分页展示数据
	public function getDataList(){
		if($this->method_mode == 0){
			$data = $this->data;
			$pageSize = $this->pageSize;
			$data = array_slice($data,($this->page-1)*$pageSize,$pageSize);
			return $data;
		}else{
			return "该方法无法调用";
		}
	}


	private function toPage(){
		$to_page = "<div class='find-page' style='display:inline;'>&nbsp;到第<input value='".I('page')."' id='tofind' style='width:40px;' min='1' max='".$this->pageTotal."' type='number'/>页".
		"<a style='clear:both;' class='button' href='javascript:void(0);' onclick='jump_to(this)'>确定</a></div>";
		return $to_page;
	}
	
	public function getPageStyle(){
	    if($this->pageTotal > 1){
	    	$pages[0] = $this->first()."&nbsp;";
		    $pages[1] = $this->getPageList()."&nbsp;";
		    $pages[2] = $this->last()."&nbsp;";
		    $pages[3] = '<span>共'.$this->data_num."条记录&nbsp;|&nbsp;共".$this->pageTotal.'页&nbsp;';
		    $pages[4] = $this->toPage();
	    }else{
	    	$pages[0] = "<span style='margin-left:10px;'>共有".count($this->data)."条记录</span>";
	    }
	   
   		$style = '';
	
	    foreach($pages as $k=>$v){
	        $style .= $v;
	    }
	    return $style;
	}
   
    

}